package com.tedu.API;

import org.junit.Test;

public class StringBuilderAPI {
    /**
     * 字符串大量拼接: 注意String造成内存溢出
     * String str="123"+st;
     * String st="456";
     */
   // @Test
   // public void testString(){
     //   String str="字符串";
     //   for(int i=0;i<100000000;i++){
      //      str+=i;   //字符串1  2  3  4  5  6  ......
      //  }
   // }

    /**
     * String -----不可改变对象  BUG(常量池)
     * 假设: 拼接出1000000000w个String ---内存【开销过大】
     * 操作系统发现内存空间越来越小，会去硬盘上开辟空间---程序、电脑卡顿
     *
     * 解决方案: 不创建新对象，原来对象实现拼接【添加、替换、插入】
     * StringBuilder对象   可变字符串对象
     * 语法: StringBuilder sb=new StringBuilder("字符串");
     *
     * C和Java的特点--
     * C语言     面向过程  定义变量--int a=malloc(4); 开辟4个字节空间
     *                            a=1;
     *                            free(a);  清理内存
     *                            不会存在内存溢出问题
     * Java语言  面向对象  定义变量--int a=1  内存开辟a空间，保存1，JVM虚拟机提供GC功能
     *                            存在内存溢出问题
     *
      */
    @Test
    public void testSB(){
        //穿件一个可变字符串对象【解决String大量拼接，造成内存溢出】
        String str="你就是我的";
        StringBuilder sb=new StringBuilder(str);
        //append方法   添加新字符串，等同于加号【拼接】
        sb.append("小可爱~");
        System.out.println(sb);
    }
    //***************************
    /**
     * replace方法:    替换     返回值: String
     * 作用: 可以将字符串中指定范围中"内容"替换成给定的内容
     *             含头不含尾
     * replace(int, start,int,end,str)
     *        开始位置，结束位置，替换内容
     */
    @Test
    public void testReplace(){
        //创建StringBuilder可变字符串类,构造器当中直接传字符串
        StringBuilder sb=new StringBuilder("只道是流水杏花最难辨，消得几回潮落又潮生~");
        sb.replace(5,7,"桃花");
        System.out.println(sb);
    }
    /**
     * insert方法     插入     返回值: String
     * 作用: 将给定字符串插入到当前字符串中某个位置
     * insert(int,index,String  str)
     *    插入位置，插入内容
     */
    @Test
    public void testInsert(){
        //创建  可变字符串对象
        StringBuilder sb=new StringBuilder("速溶茶粉");
        sb.insert(4,"将茶叶制成那种东西，实在是暴殄天物");
        System.out.println(sb);
    }
    /**考试题
     * StringBuilder 和 StringBuffer的区别?
     * StringBuilder 和 StringBuffer---方法完全一致【追加、替换、插入】
     * StringBuilder---JDK1.0---线程安全【效率低】
     * StringBuffer----JDK1.5---线程不安全【效率高】   √
     *
     * 需求说明书:  模块用什么类【标注】   业务
     *
     */
}
